跳到主要内容

Rust 模式匹配

阐述

模式一般由以下内容组合而成:

  • 字面值
  • 解构的数组、枚举、结构体或者元组
  • 变量
  • 通配符
  • 占位符

let 匹配

let 绑定就是一种匹配:

let (x, y, z) = (1, 2, 3);

if let 或者 while let 匹配

if let Some(3) = v {
println!("three");
}

match 匹配

match target {
模式1 => 表达式1,
模式2 => {
语句1;
语句2;
表达式2
},
_ => 表达式3
}

matches!

matches! 可以返回一个表达式是否与一个模式匹配。

let foo = 'f';
assert!(matches!(foo, 'A'..='Z' | 'a'..='z'));

let bar = Some(4);
assert!(matches!(bar, Some(x) if x > 2));

匹配守卫

在模式后面还可以加上条件判断,这样可以提高表达能力,并且条件判断中的变量不受覆盖影响

fn main() {
let x = Some(5);
let y = 10;

match x {
Some(50) => println!("Got 50"),
Some(n) if n == y => println!("Matched, n = {}", n),
_ => println!("Default case, x = {:?}", x),
}

println!("at the end: x = {:?}, y = {}", x, y);
}

实例

模式列表

  • 字面值,如 1
  • 变量,如 Some(x)
  • 多个值,如 1 | 2
  • 范围,如 1..=5
  • 解构,如 Point { x, y },甚至 Point { x, y: 0 }
  • 数组,如 [x, y],或不定长 [x, ..]
  • 守卫
  • @绑定

性质

相关内容

参考文献